package presentacion;
//Registrar Articulo
import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JInternalFrame;

import static biblioteca.FuncionesDeVentanas.*;

import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JCheckBox;
import javax.swing.SwingConstants;
import javax.swing.border.BevelBorder;
import javax.swing.border.TitledBorder;
import javax.swing.JButton;

import accesoADatos.SqlQuery;

import java.awt.Font;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.sql.SQLException;
import java.text.ParseException;

import javax.swing.JComboBox;

public class RegistroDeArticulo extends JInternalFrame {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private JTextField textFieldCodigoArticulo;
	private JTextField textFieldDescripcionDelArticulo;
	private JTextField textFieldPrecioCosto;
	private JTextField textFieldUtilidad;
	private JTextField textFieldPrecioVenta;
	
	private JButton btnNuevoArticulo;
	private JButton btnGuardarArticulo;
	private JButton btnRetornarArticulo;
	private JButton btnBuscarArticulo;
	public JButton btnModificarArticulo;
	public JButton btnCancelarArticulo;
	private boolean esModificar = false;
	private JTextField textFieldItbis;
	private JPanel panelPrincipal;
	private JComboBox comboCategorias;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try 
				{
					RegistroDeArticulo frame = new RegistroDeArticulo();
					frame.setVisible(true);
				} 
				catch (Exception e) 
				{
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public RegistroDeArticulo() throws ParseException {
		//setClosable(true);
		
		setTitle("Registro de Articulos");
		setBounds(100, 100, 587, 341);
		
		quitarBotonesDelSistemaJInternalFrame(this);
		quitarBotonEsquinaIzquierdaJInternalFrame(this);
		
		getContentPane().setLayout(new BorderLayout(0, 0));
		
	    panelPrincipal = new JPanel();
	    panelPrincipal.setLayout(null);
		/*GroupLayout groupLayout = new GroupLayout(getContentPane());
		groupLayout.setHorizontalGroup(
			groupLayout.createParallelGroup(Alignment.TRAILING)
				.addComponent(panelPrincipal, GroupLayout.DEFAULT_SIZE, 575, Short.MAX_VALUE)
		);
		groupLayout.setVerticalGroup(
			groupLayout.createParallelGroup(Alignment.LEADING)
				.addGroup(groupLayout.createSequentialGroup()
					.addComponent(panelPrincipal, GroupLayout.PREFERRED_SIZE, 309, GroupLayout.PREFERRED_SIZE)
					.addContainerGap(47, Short.MAX_VALUE))
		);
		*/
	    getContentPane().add(panelPrincipal);
		JLabel lblCodigoDelArticulo = new JLabel("Codigo del Articulo");
		lblCodigoDelArticulo.setBounds(28, 6, 112, 16);
		panelPrincipal.add(lblCodigoDelArticulo);
		
		textFieldCodigoArticulo = new JTextField();
		textFieldCodigoArticulo.setBorder(new BevelBorder(BevelBorder.LOWERED, null, null, null, null));
		textFieldCodigoArticulo.setEditable(false);
		textFieldCodigoArticulo.setBounds(27, 22, 122, 28);
		textFieldCodigoArticulo.setColumns(10);
		panelPrincipal.add(lblCodigoDelArticulo);
		panelPrincipal.add(textFieldCodigoArticulo);
		
		
		JLabel lblDescripcionDelArticulo = new JLabel("Descripcion del Articulo");
		lblDescripcionDelArticulo.setBounds(200, 6, 147, 16);
		panelPrincipal.add(lblDescripcionDelArticulo);
		
		textFieldDescripcionDelArticulo = new JTextField();
		textFieldDescripcionDelArticulo.setBorder(new BevelBorder(BevelBorder.LOWERED, null, null, null, null));
		textFieldDescripcionDelArticulo.setBounds(199, 22, 340, 28);
		textFieldDescripcionDelArticulo.setColumns(10);
		panelPrincipal.add(textFieldDescripcionDelArticulo);
		
		JLabel lblPrecioDeCosto = new JLabel("Precio de Costo");
		lblPrecioDeCosto.setBounds(307, 65, 93, 16);
		panelPrincipal.add(lblPrecioDeCosto);
		
		textFieldPrecioCosto = new JTextField();
		textFieldPrecioCosto.setBorder(new BevelBorder(BevelBorder.LOWERED, null, null, null, null));
		textFieldPrecioCosto.setBounds(397, 59, 142, 28);
		textFieldPrecioCosto.setHorizontalAlignment(SwingConstants.RIGHT);
		textFieldPrecioCosto.setText("0.00");
		textFieldPrecioCosto.setColumns(10);
		panelPrincipal.add(textFieldPrecioCosto);
		
		JPanel panel_1 = new JPanel();
		panel_1.setBounds(28, 93, 511, 161);
		panel_1.setFont(new Font("SansSerif", Font.BOLD, 14));
		panel_1.setBorder(new TitledBorder(null, "Precio de Venta", TitledBorder.LEFT, TitledBorder.TOP, null, null));
		panelPrincipal.add(panel_1);
		
		JLabel lblUtilidad = new JLabel("Utilidad %");
		lblUtilidad.setBounds(17, 38, 56, 28);
		
		JLabel lblPrecioVenta = new JLabel("Precio de Venta");
		lblPrecioVenta.setBounds(17, 73, 94, 28);
		
		JLabel lblItbis = new JLabel("ITBIS %");
		lblItbis.setBounds(17, 108, 56, 28);
		
		textFieldUtilidad = new JTextField();
		textFieldUtilidad.setBorder(new BevelBorder(BevelBorder.LOWERED, null, null, null, null));
		textFieldUtilidad.setBounds(123, 38, 150, 28);
		textFieldUtilidad.setHorizontalAlignment(SwingConstants.RIGHT);
		textFieldUtilidad.setText("0.00");
		textFieldUtilidad.setColumns(10);
		
		textFieldPrecioVenta = new JTextField();
		textFieldPrecioVenta.setBorder(new BevelBorder(BevelBorder.LOWERED, null, null, null, null));
		textFieldPrecioVenta.setBounds(123, 73, 150, 28);
		textFieldPrecioVenta.setHorizontalAlignment(SwingConstants.RIGHT);
		textFieldPrecioVenta.setText("0.00");
		textFieldPrecioVenta.setColumns(10);
		panel_1.setLayout(null);
		panel_1.add(lblUtilidad);
		panel_1.add(lblPrecioVenta);
		panel_1.add(lblItbis);
		panel_1.add(textFieldUtilidad);
		panel_1.add(textFieldPrecioVenta);
		
		
		comboCategorias = new JComboBox();
		comboCategorias.setBounds(123, 108, 56, 26);
		panel_1.add(comboCategorias);
		
		textFieldItbis = new JTextField();
		textFieldItbis.setEnabled(false);
		textFieldItbis.setBorder(new BevelBorder(BevelBorder.LOWERED,null, null, null, null));
		textFieldItbis.setHorizontalAlignment(SwingConstants.RIGHT);
		textFieldItbis.setText("0.00");
		textFieldItbis.setEditable(false);
		textFieldItbis.setBounds(183, 108, 90, 28);
		panel_1.add(textFieldItbis);
		textFieldItbis.setColumns(10);
		panel_1.add(textFieldItbis);
		
		btnBuscarArticulo = new JButton("Buscar Articulo");
		btnBuscarArticulo.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) 
			{
				FormBusquedaDeArticulo buscarArticulo = new FormBusquedaDeArticulo(RegistroDeArticulo.this);
				VentanaPrincipal.desktopPane.add(buscarArticulo);
				buscarArticulo.toFront();
				buscarArticulo.setVisible(true);
			}
		});
		btnBuscarArticulo.setBounds(25, 51, 127, 28);
		panelPrincipal.add(btnBuscarArticulo);
		
		JPanel panel_2 = new JPanel();
		panel_2.setBounds(6, 250, 563, 57);
		panelPrincipal.add(panel_2);
		panel_2.setLayout(null);
		
		btnNuevoArticulo = new JButton("Nuevo Articulo");
		btnNuevoArticulo.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) 
			{
				habilitarCampos();
				btnGuardarArticulo.setEnabled(true);
				btnCancelarArticulo.setEnabled(true);
			}
		});
		btnNuevoArticulo.setBounds(8, 15, 106, 28);
		panel_2.add(btnNuevoArticulo);
		
		btnGuardarArticulo = new JButton("Guardar");
		btnGuardarArticulo.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) 
			{
				if (esModificar)
				{
					modificarDatos();
				}
				else
				{
					guardarDatos();
				}
			}
		});
		btnGuardarArticulo.setBounds(115, 15, 106, 28);
		panel_2.add(btnGuardarArticulo);
		btnGuardarArticulo.setEnabled(false);
		
		btnCancelarArticulo = new JButton("Cancelar");
		btnCancelarArticulo.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) 
			{
				limpiarCampos();				
				bloquearCampos();
				btnNuevoArticulo.setEnabled(true);
				btnBuscarArticulo.setEnabled(true);
				if (esModificar) {
					btnModificarArticulo.setEnabled(false);
					esModificar = false;
				}
				btnGuardarArticulo.setEnabled(false);
				btnModificarArticulo.setEnabled(false);
				btnCancelarArticulo.setEnabled(false);
			}
		});
		btnCancelarArticulo.setBounds(328, 15, 106, 28);
		panel_2.add(btnCancelarArticulo);
		btnCancelarArticulo.setEnabled(false);
		
		btnRetornarArticulo = new JButton("Retornar");
		btnRetornarArticulo.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) 
			{
				dispose();
			}
		});
		btnRetornarArticulo.setBounds(435, 15, 106, 28);
		panel_2.add(btnRetornarArticulo);
		
		btnModificarArticulo = new JButton("Modificar");
		btnModificarArticulo.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) 
			{
				esModificar = true;
				btnGuardarArticulo.setEnabled(true);
				btnModificarArticulo.setEnabled(false);
				habilitarCampos();
			}
		});
		btnModificarArticulo.setEnabled(false);
		btnModificarArticulo.setBounds(221, 15, 106, 28);
		panel_2.add(btnModificarArticulo);	
		
	bloquearCampos();
	}
	
//Funcion para guardar los datos en la base de datos
	public void guardarDatos()
	{
		SqlQuery objetoSql = new SqlQuery();
		try {
				String decripcionDelArticulo = textFieldDescripcionDelArticulo.getText();
				String precioDeCosto 		 = textFieldPrecioCosto.getText();
				String utilidad     		 = textFieldUtilidad.getText();
				String precioDeVenta         = textFieldPrecioVenta.getText();
				String itbis                 = textFieldItbis.getText();

				objetoSql.conectar("localhost", "pos", "root", "");
				
				String sql = "INSERT INTO articulos (id_articulo,descripcion,precio_costo,utilidad,precio_venta,itbis) VALUES(?,?,?,?,?,?)";
				
				java.sql.PreparedStatement psd = objetoSql.conexion.prepareStatement(sql);
		

				if (textFieldDescripcionDelArticulo.getText().equals("") || textFieldPrecioCosto.getText().equals("0.00") || textFieldUtilidad.getText().equals("0.00") || textFieldPrecioVenta.getText().equals("0.00")|| textFieldItbis.getText().equals(""))
				{
					JOptionPane.showMessageDialog(null,"No pueden existir campos vacios.\n Favor completar registo");					
				} 
				else 
				{
					psd.setString(1, null);
					psd.setString(2, decripcionDelArticulo);
					psd.setString(3, precioDeCosto);
					psd.setString(4, utilidad);
					psd.setString(5, precioDeVenta);
					psd.setString(6, itbis);
					psd.executeUpdate();
				
					btnBuscarArticulo.setEnabled(true);
					btnCancelarArticulo.setEnabled(false);
					btnNuevoArticulo.setEnabled(true);
					btnGuardarArticulo.setEnabled(false);
					limpiarCampos();
					bloquearCampos();
					btnBuscarArticulo.setEnabled(true);

					JOptionPane.showMessageDialog(null,"El registro se guardo correctamente");
				}
			} 
		catch (ClassNotFoundException e) 
		{
			e.printStackTrace();
		} 
		catch (SQLException e) 
		{
			e.printStackTrace();
		} 
		finally 
		{
			try 
			{

			}// fin de try
			catch (Exception excepcion) 
			{
				excepcion.printStackTrace();
			}// fin de catch
		}// fin de finally
	}

//modifica los datos en la tabla
	public void modificarDatos() 
	{
		SqlQuery objetoSql = new SqlQuery();
		int codigo = Integer.parseInt(textFieldCodigoArticulo.getText());

		try 
		{
			String decripcionDelArticulo = textFieldDescripcionDelArticulo.getText();
			String precioDeCosto 		 = textFieldPrecioCosto.getText();
			String utilidad     		 = textFieldUtilidad.getText();
			String precioDeVenta         = textFieldPrecioVenta.getText();
			String itbis                 = textFieldItbis.getText();

			objetoSql.conectar("localhost", "pos", "root", "");

			String sql = "UPDATE  articulos SET descripcion =? ,precio_costo =? ,utilidad =? ,precio_venta =? ,itbis =?  WHERE id_articulo ='" + codigo + "'";
			
			java.sql.PreparedStatement psd = objetoSql.conexion.prepareStatement(sql);

			if (textFieldDescripcionDelArticulo.getText().equals("") || textFieldPrecioCosto.getText().equals("0.00") || textFieldUtilidad.getText().equals("0.00") || textFieldPrecioVenta.getText().equals("0.00")|| textFieldItbis.getText().equals("")) 
			{
				JOptionPane.showMessageDialog(null, "No pueden existir campos vacios.\n Favor completar registo");
				
			}
			else 
			{
				esModificar =false;
				
				psd.setString(1, decripcionDelArticulo);
				psd.setString(2, precioDeCosto);
				psd.setString(3, utilidad);
				psd.setString(4, precioDeVenta);
				psd.setString(5, itbis);
				psd.executeUpdate();
				
				btnBuscarArticulo.setEnabled(true);
				btnCancelarArticulo.setEnabled(false);
				btnNuevoArticulo.setEnabled(true);
				btnGuardarArticulo.setEnabled(false);

				JOptionPane.showMessageDialog(null, "El registro se guardo correctamente");
				limpiarCampos();
			}
		} 
		catch (ClassNotFoundException e) 
		{
			e.printStackTrace();
		} 
		catch (SQLException e) 
		{
			e.printStackTrace();
		} 
		finally
		{
			try {

			}// fin de try
			catch (Exception excepcion) 
			{
				excepcion.printStackTrace();
			}// fin de catch
		}// fin de finally
	}

//carga los datos de la busqueda para ser modificados
	public void cargarDatosBusqueda(String codigoArticulo, String descripcionDelArticulo, String precioDeCosto, String utilidad, String precioDeVenta, String itbis) 
	{	
		textFieldCodigoArticulo.setText(codigoArticulo);
		textFieldDescripcionDelArticulo.setText(descripcionDelArticulo);
		textFieldPrecioCosto.setText(precioDeCosto);
		textFieldUtilidad.setText(utilidad);
		textFieldPrecioVenta.setText(precioDeVenta);
		textFieldItbis.setText(itbis);		
	}

//limpia los campos en los textField
	protected void limpiarCampos() 
	{	
		textFieldCodigoArticulo.setText("");
		textFieldDescripcionDelArticulo.setText("");
		textFieldPrecioCosto.setText("0.00");
		textFieldUtilidad.setText("0.00");
		textFieldPrecioVenta.setText("0.00");
		textFieldItbis.setText("0.00");
	}

//bloquea los campos dada algunas condiciones	
	public void bloquearCampos()
	{
		textFieldDescripcionDelArticulo.setEnabled(false);
		textFieldPrecioCosto.setEnabled(false);
		textFieldUtilidad.setEnabled(false);
		textFieldPrecioVenta.setEnabled(false);
	}

//habilita los campos dada algunas condiciones	
	public void habilitarCampos()
	{
		textFieldDescripcionDelArticulo.setEnabled(true);
		textFieldPrecioCosto.setEnabled(true);
		textFieldUtilidad.setEnabled(true);
		textFieldPrecioVenta.setEnabled(true);
		textFieldItbis.setEnabled(true);
		
		btnBuscarArticulo.setEnabled(false);
		btnNuevoArticulo.setEnabled(false);
	}
	
	public void botonesEvento()
	{
		btnCancelarArticulo.setEnabled(true);
		btnModificarArticulo.setEnabled(true);
	}
}